#ifndef BASE_ELEMENT_H
#define BASE_ELEMENT_H

#include <list>
#include <string>
#include <iostream>

class DoctypeDefinition;
class Attribute;

class BaseElement {
	
public:
	BaseElement(std::string aName);
	virtual ~BaseElement ();
	void setAttList(std::list<Attribute*> aList);
	virtual bool isParentOf(BaseElement &e) = 0;
	virtual std::string generateRegex(DoctypeDefinition* dtd) = 0;
	
	virtual void print(std::ostream& out) = 0;
	
	static const std::string REGEX_NAME;

protected:
	std::string name;
	std::list<Attribute*> attList;
	
	void printAttributes(std::ostream& out);

};

#endif //BASE_ELEMENT_H
